package com.xmd.red.utils;

import java.util.Map;
import java.util.Random;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;

public class RedPacketPool {

	/**
	 * 红包池
	 * key:		红包金额
	 * value:	剩余红包数量
	 */
	public static Map<Integer, Integer> pool = new ConcurrentHashMap<Integer, Integer>();

	
	/**
	 * 初始化红包
	 */
	public static void init(){
		
		int[] count = RedPacketUtil.create();
		for(int i=0;i<count.length;i++){
			if(count[i]!=0){
				pool.put(i, count[i]);
			}
		}
	}
	
	/**
	 * 随机获取红包池的一个红包,红包池中减少对应的数据
	 * 如果返回值为0,表示红包池中已经没有红包了
	 */
	public static Integer randomGet(){
		if(pool.size()==0){
			return 0;
		}
		//获取剩余的红包key
		Set<Integer> keys = pool.keySet();
		//把set转成数组,方便获取随机数
		Integer[] keyArray = keys.toArray(new Integer[]{});
		
		//根据数组的长度,获取数组中一个随机位置,该位置的值即是红包的金额
		int length = keyArray.length;
		Random random = new Random();
		int randomInt = random.nextInt(length);
		//红包金额
		int randomKey = keyArray[randomInt];
		
		//查询该金额红包的数量并-1,如果-1后的数量为0.从红包池中删除该红包
		int count = pool.get(randomKey);
		count = count -1;
		if(count==0){
			pool.remove(randomKey);
		}else{
			pool.put(randomKey, count);
		}
		return randomKey;
	}
	
	/**
	 * 返回当前红包池
	 */
	public static Map<Integer,Integer> getPool(){
		return pool;
	}
}
